/*
 * Nome do arquivo: RecebeDadosusuario.java
 * Autores:	Bruno Villas Bôas           - 317527
 *              Diego Zamboni               - 344990
 *              Endel Guimarães             - 379930
 * 		Guilherme Torres            - 400572
 *		Renan Oliveira              - 380113
 * 
 * Turma: 2012/1
 *
 * Descricao: Servlet responsável pelo gerenciamento de usuarios
 *
 * Data de conclusao: 
 */
package cooper.classes.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.jmx.remote.internal.ArrayQueue;
import cooper.classes.bean.ColaboradorBean;
import cooper.classes.bean.CooperativaBean;
import cooper.classes.bean.ServicoBean;
import cooper.classes.bean.UsuarioBean;
import cooper.classes.dao.*;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;

public class RecebeDadosUsuario extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        String acao = request.getParameter("acao");
        if (acao.equals("logout")
                && session.getAttribute("tipoUsuario") != null) {
            session.removeAttribute("tipoUsuario");
            response.sendRedirect("index.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //String acao = request.getParameter("acao");
        tipo = request.getParameter("tipoLogin");
        String usuario = request.getParameter("login");
        String senha = request.getParameter("senha");
        HttpSession session = request.getSession();
        if (tipo.equals("1")) { //se for usuario cooperativa
            if (acaoConsultar(request, response, usuario, senha)) {

                session.setAttribute("tipoUsuario", 1);
                session.setAttribute("idUsuario", ub.getId());
                session.setAttribute("nomeUsuario", cooperativaBean.getNome());
                session.setAttribute("bean", ub);
                session.setAttribute("beanCooperativa", cooperativaBean);
//                session.setAttribute("servicos", servicos);
                response.sendRedirect("indexcoop.jsp?login=ok");
            } else {
                response.sendRedirect("prelogincoop.jsp?erro=Usuario ou senha invalidos!");
            }
            
            
        } else {//se for usuario colaborador
            if (acaoConsultar(request, response, usuario, senha)) {

                session.setAttribute("tipoUsuario", 2);
                session.setAttribute("idUsuario", ub.getId());
                session.setAttribute("nomeUsuario", colaboradorBean.getNome());
                session.setAttribute("bean", ub);
                session.setAttribute("beanColaborador", colaboradorBean);

                response.sendRedirect("indexprest.jsp?login=ok");
            } else {
                response.sendRedirect("preloginprest.jsp?erro=Usuario ou senha invalidos!");
            }
        }

        /*
         * if (acao.compareTo("cadastrar") == 0) { try { acaoCadastrar(request,
         * response); } catch (CooperDAOException ex) {
         * Logger.getLogger(RecebeDadosUsuario.class.getName()).log(Level.SEVERE,
         * null, ex); } } else if(acao.compareTo("alterar") == 0) { try {
         * acaoAlterar(request, response); } catch (CooperDAOException ex) {
         * Logger.getLogger(RecebeDadosUsuario.class.getName()).log(Level.SEVERE,
         * null, ex); } } else if(acao.compareTo("remover") == 0) { try {
         * acaoRemover(request, response); } catch (CooperDAOException ex) {
         * Logger.getLogger(RecebeDadosUsuario.class.getName()).log(Level.SEVERE,
         * null, ex); } } else if(acao.compareTo("consultar") == 0) { String
         * nome = request.getParameter("nome"); acaoConsultar(request, response,
         * nome); }
         *
         */
    }

    private void acaoCadastrar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, CooperDAOException {
        UsuarioBean objusuario = new UsuarioBean();

        objusuario.setUsuario(request.getParameter("usuario"));
        objusuario.setSenha(request.getParameter("senha"));
        objusuario.setTipoUsuario(Integer.parseInt(request.getParameter("tipousuario")));
        objusuario.setIdCooperativaColaborador(Integer.parseInt(request.getParameter("idcooperativacolaborador")));

        String html = "";

        // Instanciando a usuario e permitindo que ela seja vista na view
        try {
            UsuarioDAO entidade = new UsuarioDAO();
            entidade.cadastrar(objusuario);
            request.setAttribute("usuarioBean", objusuario);
            html = "Sucesso " + request.getParameter("nome");
        } catch (CooperDAOException e) {
            request.setAttribute("usuarioBean", null);
            html = "Erro: " + e.getMessage();
        }

        PrintWriter out = response.getWriter();
        out.print(html);
        out.close();
    }

    private void acaoAlterar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, CooperDAOException {
        UsuarioBean objusuario = new UsuarioBean();

        objusuario.setId(Integer.parseInt(request.getParameter("id")));
        objusuario.setSenha(request.getParameter("senha"));

        try {
            UsuarioDAO entidade = new UsuarioDAO();
            entidade.alterar(objusuario);
            request.setAttribute("usuarioBean", objusuario);
        } catch (CooperDAOException e) {
            request.setAttribute("usuarioBean", null);
        }

        RequestDispatcher rd = null;

        // Tem que redirecionar para o view certo
        rd = request.getRequestDispatcher("/manageusuarios.jsp");
        rd.forward(request, response);
    }

    private void acaoRemover(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, CooperDAOException {
        UsuarioBean objusuario = new UsuarioBean();

        objusuario.setId(Integer.parseInt(request.getParameter("id")));

        try {
            UsuarioDAO entidade = new UsuarioDAO();
            entidade.remover(objusuario);
            request.setAttribute("usuarioBean", objusuario);
        } catch (CooperDAOException e) {
            request.setAttribute("usuarioBean", null);
        }

        RequestDispatcher rd = null;

        // Tem que redirecionar para o view certo
        rd = request.getRequestDispatcher("/viewusuarios.jsp");
        rd.forward(request, response);
    }

    private boolean acaoConsultar(HttpServletRequest request, HttpServletResponse response, String nome, String senha)
            throws ServletException, IOException {
        try {
            // Não está fazendo paginação
            // Esse é um protótipo

            UsuarioDAO usuario = new UsuarioDAO();
            ArrayList novo = usuario.consultar(nome, senha);

            int total = usuario.getTotal();


            //se a lista for vazia
            if (novo.isEmpty()) {
                return false;
            }

            ub = (UsuarioBean) novo.get(0);


            if (tipo.equals("1")) {
                CooperativaDAO cd = new CooperativaDAO();
                ArrayList cooperativaList = cd.consultarLogin(ub.getIdCooperativaColaborador());

                if (cooperativaList.isEmpty()) {
                    return false;
                }

                cooperativaBean = (CooperativaBean) cooperativaList.get(0);
                //request.setAttribute("total", total);
                
                

            } else {
                ColaboradorDAO cd = new ColaboradorDAO();
                ArrayList colaboradorList = cd.consultarLogin(ub.getIdCooperativaColaborador());

                if (colaboradorList.isEmpty()) {
                    return false;
                }

                colaboradorBean = (ColaboradorBean) colaboradorList.get(0);
                //request.setAttribute("total", total);
            }
            return true;

        } catch (Exception sqle) {
            request.setAttribute("usuarioBean", null);
            request.setAttribute("msg", sqle.getMessage());
            return false;
        }
//        
//        RequestDispatcher rd = null;
//        
//        // Tem que redirecionar para o view certo
//        rd = request.getRequestDispatcher("/viewusuarioConsulta.jsp");
//        rd.forward(request,response);
    }
    private UsuarioBean ub;
    private ColaboradorBean colaboradorBean;
    private CooperativaBean cooperativaBean;
  //  private ArrayList<ServicoDAO> servicos;
    private String tipo;
}
